package com.hjy.common.transport;

import com.google.common.primitives.Bytes;
import com.hjy.common.error.Error;

import java.util.Arrays;

/**
 * 加密解密器, 数据第一位标志正常信息还是错误信息
 * 1: 表示错误信息
 * 0: 表示正常信息
 */
public class Encoder {

    public byte[] encode(Package pkg) {
        if (pkg.getErr() != null) {
            Exception err = pkg.getErr();
            String msg = "Intern server error!";
            if (err.getMessage() != null) {
                msg = err.getMessage();
            }
            // 1: 表示错误信息
            return Bytes.concat(new byte[]{1}, msg.getBytes());
        } else {
            // 0: 表示正常信息
            return Bytes.concat(new byte[]{0}, pkg.getData());
        }
    }

    public Package decode(byte[] data) throws Exception {
        if (data.length < 1) {
            throw Error.InvalidPkgDataException;
        }
        if (data[0] == 0) {
            return new Package(Arrays.copyOfRange(data, 1, data.length), null);
        } else if (data[0] == 1) {
            return new Package(null, new RuntimeException(new String(Arrays.copyOfRange(data, 1, data.length))));
        } else {
            throw Error.InvalidPkgDataException;
        }
    }

}
